package org.example.collect;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/*
Set容器特点：无序、不可重复。
无序指Set中的元素没有索引，我们只能遍历查找;
不可重复指不允许加入重复的元素。
更确切地讲，新元素如果和Set中某个元素通过equals()方法对比为true，则不能加入;
甚至，Set中也只能放入一个null元素，不能多个。
*/


public class CustomSet {

    private HashSet<Integer> set;

    public CustomSet(Integer...elements){
        this.set = new HashSet<Integer>();
        for (int i = 0; i < elements.length; i++) {
            set.add(elements[i]);
        }
    }

    public HashSet<Integer> getSet() {
        return set;
    }

    public void setSet(HashSet<Integer> set) {
        this.set = set;
    }

    public void print(boolean isToString){
        if(!isToString){
            System.out.println("元素包括：");
            for (Integer ele:set) {
                // Set不能使用下标访问
                System.out.print(ele);
                System.out.print("     ");
            }
            System.out.println("\r\n----------");
        }
        else {
            System.out.println("元素包括：");
            System.out.print(set.toString());
            System.out.println("\r\n----------");
        }
    }

    public int max(){
        Integer max = null;
        for (Integer ele:set) {
            if(ele.compareTo(max)>0){
                max = ele;
            }
        }
        return max;
    }

    public void removeEle(Integer ele){
        set.remove(ele);
    }

    public void removeByIdx(int idx){
        System.out.println("不支持remove by index");
    }

    public void add(int idx,Integer ele){
        System.out.println("不支持add by index");
    }

    public void add(Integer ele){
        set.add(ele);
    }

    public void asc(){
        System.out.println("不支持");
    }

    public void desc(){
        System.out.println("不支持");
    }

    public void exclusive(Integer max){
        Set<Integer> res = new HashSet<>();
        // list遍历iterator，才可以直接删除list中元素。list的for、while循环中不允许添加删除list的元素
        Iterator<Integer> iterator=set.iterator();
        while (iterator.hasNext()){
            Integer ele=iterator.next();
            if(ele.compareTo(max)>0){
                iterator.remove();
            }
        }
    }
}